package com.moodswings.server.service;

import com.moodswings.server.model.Mood;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * komunicira sa bazom podataka za unosenje ili nalazenje unosa raspolozenja,koriste je servleti
 */
public class MoodService {

	public MoodService() {
		DbSession.init();
	}

	/**
	 * unosi dati mood u bazu podataka
	 */
	public void addMood(Mood mood) {

		DbSession dbSession = new DbSession();      //otvara komunikaciju sa bazom
		dbSession.connect();


		Float lat = mood.getLatitude();             //uzima vrednosti atributa
		Float longitude = mood.getLongitude();
		int moodId = mood.getMoodId();
		String userId = mood.getUserId();
		Long time = mood.getTime();

		PreparedStatement pst = dbSession.createStatement("INSERT INTO moodswing(`long`,lat,moodId,userId,time) VALUES (?,?,?,?,?);"); //priprema SQL upit


		try {                                       //postavlja vrednosti atributa u SQL upit
			pst.setFloat(1, longitude);
			pst.setFloat(2, lat);
			pst.setInt(3, moodId);
			pst.setString(4, userId);
			pst.setLong(5, time);


			pst.execute();                          //izvrsava upit


		} catch (SQLException e) {
			e.printStackTrace();
		}

		dbSession.close();                        //zatvara komunikaciju sa bazom
	}


	/**
	 * @param count
	 * pronadje poslednjih count raspolozenja unetih u bazu i vrati kao listu
	 */

	public List<Mood> findLastMoods(int count) {

		DbSession dbSession = new DbSession();
		dbSession.connect();                      //otvara komunikaciju sa bazom

		List<Mood> list = new ArrayList<Mood>();

		PreparedStatement pst = dbSession.createStatement("select * from moodswing order by id desc limit 0, ?"); //stvara sql upit sa jednim neodredjenim atributom
		try {                                                                                                     //sortira po id jer je id autoincrement, bice
			//odabrano poslednjih count unosa (najskoriji)
			pst.setInt(1, count);       //dodeli taj neodredjeni atribut

			ResultSet rs = pst.executeQuery();   //izvrsi upit i vracenu vrednost smesti u rs

			while (rs.next()) {                  //prodje kroz rs i stvori od rezultata upita odgovarajuce mood-ove, pa ih smesti u listu
				Mood mood = new Mood();

				mood.setLatitude(rs.getFloat("lat"));   //kupi atribute iz rs i postavlja u mood
				mood.setLongitude(rs.getFloat("long"));
				mood.setMoodId(rs.getInt("moodId"));
				mood.setUserId(rs.getString("userId"));
				mood.setTime(rs.getLong("time"));

				list.add(mood);                     //dodaje mood u listu
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		dbSession.close();                        //zatvara komunikaciju sa bazom
		return list;                              //vraca listu poslednjih count mood-ova
	}

}
